//定义变量 

//基本数据类型 ：string number boolean null undefined  symbol

//ts any:任意的类型  元组 tuple  枚举 enum  void:没有类型  never：

//引用数据类型：array object

let str:string = 'hello';

let num:number = 1;


//联合类型  管道标识符

let pagenum:number|undefined|boolean = true;

let pagenum1:any = null;

pagenum1 = undefined;

pagenum1 = 123;

//数组

//1.第一种：let 变量名:数据类型[] = []

// let arr:string[] = ['zs','lisi','lili'];

// let score:number[] = [90,80,70,20,0];

//2.第二种： let 变量名:Array<数据类型> = []

let arr:Array<string> = ['zs','lisi','lili'];

let score:Array<number> = [90,80,70,20,0];

let test:Array<boolean> = [true,false,true]

//定义元组 是数组的一种  规定了数组的每一个元素类型，和数组的长度 不能空格占位

let arr1:[string,number,boolean,null,undefined] = ['zs',18,true,null,undefined];

console.log(arr1[0]);

//数组里放置的是任意类型

let arr2:any[] = [1,'2',true,99,null,undefined];

//枚举 

/**
 * enum 变量名{  首字母大写
 *  枚举类型1=值1,
 *  枚举类型2=值2
 *  ...
 * }
 * 
*/

//角色  讲师：1  学生:3  学委:2

enum Role{
    teacher=1,
    student=3,
    team=2
}

console.log(Role.student);

enum Sex{
    girl=1,
    boy=2,
    unkown=3
}

enum Week{
    monday, //0
    Tuesday,//1
    Wednesday//2
}

//如果枚举没有给定值，默认值是从0开始

console.log(Week);

//void 常用：确定函数没有返回值

let name1:void = undefined;

function registry():void{
    
}


//never 常用在函数永远不会结束的返回值  了解

//返回“从不”的函数不能具有可访问的终结点

function ajax():never{
    // throw new Error('请求失败')
    while(true){

    }
}

//类型断言  封装路由表的时候会用

let type:any = 'lei xing duan yan';

//第一种：

let sub:string = (<string>type).substr(0,1);

//第二种  常用

let sub1:string = (type as string).substr(0,1);

// let obj = {
//     name:'lili',
//     age:18
// }
// obj = {
//     name:0,
//     age:'1'
// };










